/*      */ package dm.jdbc.dataConvertion;
/*      */ 
/*      */ import dm.jdbc.dbaccess.Const;
/*      */ import dm.jdbc.dbaccess.DBError;
/*      */ import dm.jdbc.desc.DTypeInfo;
/*      */ import dm.jdbc.desc.LobDesc;
/*      */ import dm.jdbc.driver.DmdbCSI;
/*      */ import dm.jdbc.driver.DmdbConnection_bs;
/*      */ import dm.jdbc.driver.DmdbLobLocator;
/*      */ import dm.jdbc.driver.DmdbNumeric;
/*      */ import dm.sql.DmdbDateTime;
/*      */ import dm.sql.DmdbIntervalDT;
/*      */ import dm.sql.DmdbIntervalYM;
/*      */ import dm.sql.DmdbTime;
/*      */ import dm.sql.DmdbTimeZone;
/*      */ import java.io.PrintStream;
/*      */ import java.io.UnsupportedEncodingException;
/*      */ import java.math.BigDecimal;
/*      */ import java.sql.Date;
/*      */ import java.sql.SQLException;
/*      */ import java.sql.Time;
/*      */ import java.sql.Timestamp;
/*      */ import java.util.ResourceBundle;
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ public class Convertion
/*      */ {
/*      */   public static final byte[] booleanToByteArray(boolean b)
/*      */   {
/*   49 */     byte[] b_array = new byte[1];
/*   50 */     b_array[0] = ((byte)(b ? 1 : 0));
/*   51 */     return b_array;
/*      */   }
/*      */   
/*      */   public static final byte[] byteToByteArray(byte b)
/*      */   {
/*   56 */     byte[] b_array = new byte[1];
/*   57 */     b_array[0] = b;
/*   58 */     return b_array;
/*      */   }
/*      */   
/*      */   public static final byte[] doubleToByteArray(double d)
/*      */   {
/*   63 */     long l = Double.doubleToLongBits(d);
/*   64 */     return longToByteArray(l);
/*      */   }
/*      */   
/*      */   public static final byte[] floatToByteArray(float f)
/*      */   {
/*   69 */     int i = Float.floatToIntBits(f);
/*   70 */     return IntToByteArray(i);
/*      */   }
/*      */   
/*      */   public static final byte[] shortToByteArray(int i)
/*      */   {
/*   75 */     byte[] b = new byte[2];
/*   76 */     int position = 0;
/*   77 */     b[(position++)] = ((byte)(i & 0xFF));
/*   78 */     b[position] = ((byte)(i >>> 8));
/*      */     
/*   80 */     return b;
/*      */   }
/*      */   
/*      */   public static final byte[] IntToByteArray(int i)
/*      */   {
/*   85 */     byte[] b = new byte[4];
/*   86 */     int position = 0;
/*   87 */     b[(position++)] = ((byte)(i & 0xFF));
/*   88 */     b[(position++)] = ((byte)(i >>> 8 & 0xFF));
/*   89 */     b[(position++)] = ((byte)(i >>> 16 & 0xFF));
/*   90 */     b[position] = ((byte)(i >>> 24 & 0xFF));
/*   91 */     return b;
/*      */   }
/*      */   
/*      */   public static final byte[] longToByteArray(long i)
/*      */   {
/*   96 */     byte[] b = new byte[8];
/*   97 */     int position = 0;
/*   98 */     b[(position++)] = ((byte)(int)(i & 0xFF));
/*   99 */     b[(position++)] = ((byte)(int)(i >>> 8));
/*  100 */     b[(position++)] = ((byte)(int)(i >>> 16));
/*  101 */     b[(position++)] = ((byte)(int)(i >>> 24));
/*  102 */     b[(position++)] = ((byte)(int)(i >>> 32));
/*  103 */     b[(position++)] = ((byte)(int)(i >>> 40));
/*  104 */     b[(position++)] = ((byte)(int)(i >>> 48));
/*  105 */     b[(position++)] = ((byte)(int)(i >>> 56));
/*  106 */     return b;
/*      */   }
/*      */   
/*      */   public static final byte[] BigDecimalToByteArray(String x, int prec, int scale) throws SQLException
/*      */   {
/*  111 */     DmdbNumeric num = new DmdbNumeric();
/*  112 */     byte[] inValueBytes = num.StrToDec(x, prec, scale);
/*      */     
/*  114 */     return inValueBytes;
/*      */   }
/*      */   
/*      */   public static final byte[] DateToByteArray(DmdbDateTime dt)
/*      */   {
/*  119 */     return DmdbDateTime.dateEncodeFast(dt.getByteArrayValue());
/*      */   }
/*      */   
/*      */   public static final byte[] TimeToByteArray(DmdbTime t) throws SQLException
/*      */   {
/*  124 */     return DmdbTime.TimeEncodeFast(t.getByteArrayValue());
/*      */   }
/*      */   
/*      */   public static final byte[] TimeStampToByteArray(DmdbDateTime dt, int dType, int scale, short dbTz, short ltz)
/*      */     throws SQLException
/*      */   {
/*  130 */     byte[] ret = dt.getByteArrayValue();
/*      */     
/*      */ 
/*      */ 
/*      */ 
/*  135 */     return DmdbDateTime.dmdtEncodeFast(ret);
/*      */   }
/*      */   
/*      */   public static final byte[] InterDtToByteArray(DmdbIntervalDT dt) throws SQLException
/*      */   {
/*  140 */     return dt.convertStrToBs(dt.getPrecForSvr());
/*      */   }
/*      */   
/*      */   public static final byte[] InterDtToByteArray(DmdbIntervalDT dt, int scale) throws SQLException
/*      */   {
/*  145 */     return dt.convertStrToBs(scale);
/*      */   }
/*      */   
/*      */   public static final byte[] InterYMToByteArray(DmdbIntervalYM ym)
/*      */   {
/*  150 */     return ym.getByteArrayValue();
/*      */   }
/*      */   
/*      */   public static final byte[] InterYMToByteArray(DmdbIntervalYM ym, int prec) throws SQLException
/*      */   {
/*  155 */     return ym.convertStrToBs(prec);
/*      */   }
/*      */   
/*      */   public static final byte[] TimeZoneToByteArray(DmdbTimeZone tz) throws SQLException
/*      */   {
/*  160 */     return DmdbTimeZone.timeZoneEncodeFast(tz.getValueBytes());
/*      */   }
/*      */   
/*      */   public static final byte[] DateTimeZoneToByteArray(DmdbTimeZone tz) throws SQLException
/*      */   {
/*  165 */     return DmdbTimeZone.datetimeZoneEncodeFast(tz.getValueBytes());
/*      */   }
/*      */   
/*      */   public static final short twoByteToShort(byte[] byte1)
/*      */   {
/*  170 */     long n = 0L;
/*  171 */     int p = 2;
/*      */     
/*  173 */     for (int i = 0; i < 2; i++)
/*      */     {
/*  175 */       long b = 0xFF & byte1[(--p)];
/*  176 */       n = b | n << 8;
/*      */     }
/*      */     
/*  179 */     return (short)(int)(0xFFFFFFFFFFFFFFFF & n);
/*      */   }
/*      */   
/*      */   public static final int fourByteToInt(byte[] byte1)
/*      */   {
/*  184 */     if (byte1.length == 2)
/*      */     {
/*  186 */       return twoByteToShort(byte1);
/*      */     }
/*      */     
/*  189 */     long n = 0L;
/*  190 */     int p = 4;
/*      */     
/*  192 */     for (int i = 0; i < 4; i++)
/*      */     {
/*  194 */       long b = 0xFF & byte1[(--p)];
/*  195 */       n = b | n << 8;
/*      */     }
/*      */     
/*  198 */     return (int)(0xFFFFFFFFFFFFFFFF & n);
/*      */   }
/*      */   
/*      */   public static final int bytesToInt(byte[] byte1) throws SQLException
/*      */   {
/*  203 */     if (byte1.length > 4)
/*      */     {
/*  205 */       for (int j = 0; j < byte1.length - 4 - 1; j++)
/*      */       {
/*  207 */         if (byte1[j] != 0) {
/*  208 */           DBError.throwSQLException(6007);
/*      */         }
/*      */       }
/*      */     }
/*  212 */     int n = 0;
/*  213 */     int b = 0;
/*  214 */     int len = byte1.length > 4 ? 4 : byte1.length;
/*  215 */     for (int j = 0; j < len; j++)
/*      */     {
/*  217 */       b = 0xFF & byte1[j];
/*  218 */       n = b | n << 8;
/*      */     }
/*      */     
/*  221 */     return n;
/*      */   }
/*      */   
/*      */   public static final long eightByteToLong(byte[] byte1)
/*      */   {
/*  226 */     long n = 0L;
/*  227 */     int p = 8;
/*      */     
/*  229 */     for (int i = 0; i < 8; i++)
/*      */     {
/*  231 */       long b = 0xFF & byte1[(--p)];
/*  232 */       n = b | n << 8;
/*      */     }
/*      */     
/*  235 */     return n;
/*      */   }
/*      */   
/*      */   public static final long bytesToLong(byte[] byte1) throws SQLException
/*      */   {
/*  240 */     if (byte1.length > 8)
/*      */     {
/*  242 */       for (int j = 0; j < byte1.length - 8 - 1; j++)
/*      */       {
/*  244 */         if (byte1[j] != 0) {
/*  245 */           DBError.throwSQLException(6007);
/*      */         }
/*      */       }
/*      */     }
/*  249 */     long n = 0L;
/*  250 */     long b = 0L;
/*  251 */     int len = byte1.length > 8 ? 8 : byte1.length;
/*  252 */     for (int j = 0; j < len; j++)
/*      */     {
/*  254 */       b = 0xFF & byte1[j];
/*  255 */       n = b | n << 8;
/*      */     }
/*      */     
/*  258 */     return n;
/*      */   }
/*      */   
/*      */   public static final BigDecimal bytesToBigDecimal(byte[] val, int scale, int prec) throws SQLException
/*      */   {
/*  263 */     DmdbNumeric num = new DmdbNumeric();
/*  264 */     String s = num.decToString(val);
/*  265 */     BigDecimal dec = new BigDecimal(s);
/*      */     
/*  267 */     if ((scale != 0) || (prec != 0)) {
/*  268 */       dec = dec.setScale(scale, 4);
/*      */     }
/*  270 */     return dec;
/*      */   }
/*      */   
/*      */   public static final boolean bytesToBoolean(byte[] val)
/*      */   {
/*  275 */     if (val[0] == 0) {
/*  276 */       return false;
/*      */     }
/*  278 */     return true;
/*      */   }
/*      */   
/*      */   public static final Date bytesToDate(byte[] val, int scale, short dbTz, short lTz) throws SQLException
/*      */   {
/*  283 */     DmdbDateTime dt = new DmdbDateTime(val, 14, scale, dbTz, lTz);
/*  284 */     return dt.getDate();
/*      */   }
/*      */   
/*      */   public static final Time bytesToTime(byte[] val, int scale, short dbTz, short lTz) throws SQLException
/*      */   {
/*  289 */     DmdbDateTime dt = new DmdbDateTime(val, 15, scale, dbTz, lTz);
/*  290 */     return dt.getTime();
/*      */   }
/*      */   
/*      */   public static final Timestamp bytesToTimeStamp(byte[] val, int scale, short dbTz, short lTz)
/*      */     throws SQLException
/*      */   {
/*  296 */     DmdbDateTime dt = new DmdbDateTime(val, 16, scale, dbTz, lTz);
/*  297 */     return dt.getTimestamp();
/*      */   }
/*      */   
/*      */   public static final DmdbIntervalDT bytesToInterDT(byte[] val, int scale)
/*      */   {
/*  302 */     int secPrec = scale & 0xF;
/*  303 */     int loadPrec = scale >> 4 & 0xF;
/*  304 */     return new DmdbIntervalDT(val, loadPrec, secPrec);
/*      */   }
/*      */   
/*      */   public static final DmdbIntervalYM bytesToInterYM(byte[] val, int scale)
/*      */   {
/*  309 */     int loadPrec = scale >> 4 & 0xF;
/*  310 */     return new DmdbIntervalYM(val, loadPrec);
/*      */   }
/*      */   
/*      */   public static final DmdbTimeZone bytesToTimeZone(byte[] val, int scale)
/*      */   {
/*  315 */     return new DmdbTimeZone(val, scale, 1);
/*      */   }
/*      */   
/*      */   public static final DmdbTimeZone bytesToDateTimeZone(byte[] val, int scale)
/*      */   {
/*  320 */     return new DmdbTimeZone(val, scale, 2);
/*      */   }
/*      */   
/*      */   public static final float bytesToFloat(byte[] val)
/*      */   {
/*  325 */     return Float.intBitsToFloat(fourByteToInt(val));
/*      */   }
/*      */   
/*      */   public static final double bytesToDouble(byte[] val)
/*      */   {
/*  330 */     return Double.longBitsToDouble(eightByteToLong(val));
/*      */   }
/*      */   
/*      */ 
/*      */   public static final byte[] setRowid(byte[] locator)
/*      */   {
/*  336 */     byte[] rowid_high = new byte[4];
/*  337 */     byte[] rowid_low = new byte[4];
/*  338 */     byte[] tmplocator = (byte[])locator.clone();
/*      */     
/*  340 */     for (int i = 0; i < 4; i++)
/*      */     {
/*  342 */       rowid_low[i] = locator[(9 - i)];
/*      */     }
/*  344 */     for (int i = 0; i < 4; i++)
/*      */     {
/*  346 */       rowid_high[i] = locator[(13 - i)];
/*      */     }
/*  348 */     for (int i = 0; i < 4; i++)
/*      */     {
/*  350 */       tmplocator[(6 + i)] = rowid_low[i];
/*      */     }
/*  352 */     for (int i = 0; i < 4; i++)
/*      */     {
/*  354 */       tmplocator[(10 + i)] = rowid_high[i];
/*      */     }
/*      */     
/*  357 */     return tmplocator;
/*      */   }
/*      */   
/*      */   public static final byte[] truncate_rowid(byte[] rowid)
/*      */   {
/*  362 */     byte[] new_rowid = new byte[5];
/*  363 */     System.arraycopy(rowid, 4, new_rowid, 0, 4);
/*  364 */     System.arraycopy(rowid, 0, new_rowid, 4, 1);
/*  365 */     return new_rowid;
/*      */   }
/*      */   
/*      */   public static final void setByte(byte[] buf, int off, byte val)
/*      */   {
/*  370 */     buf[off] = val;
/*      */   }
/*      */   
/*      */   public static final void setBytes(byte[] buf, int offset, byte[] in)
/*      */   {
/*  375 */     System.arraycopy(in, 0, buf, offset, in.length);
/*      */   }
/*      */   
/*      */ 
/*      */   public static final void setShort(byte[] buf, int off, short val)
/*      */   {
/*  381 */     buf[off] = ((byte)(val & 0xFF));
/*  382 */     buf[(off + 1)] = ((byte)(val >> 8 & 0xFF));
/*      */   }
/*      */   
/*      */   public static final void setInt(byte[] buf, int off, int val)
/*      */   {
/*  387 */     buf[(off++)] = ((byte)(val & 0xFF));
/*  388 */     val >>= 8;
/*  389 */     buf[(off++)] = ((byte)(val & 0xFF));
/*  390 */     val >>= 8;
/*  391 */     buf[(off++)] = ((byte)(val & 0xFF));
/*  392 */     val >>= 8;
/*  393 */     buf[(off++)] = ((byte)(val & 0xFF));
/*  394 */     val >>= 8;
/*      */   }
/*      */   
/*      */   public static final void setLong(byte[] buf, int off, long val)
/*      */   {
/*  399 */     buf[(off++)] = ((byte)(int)(val & 0xFF));
/*  400 */     val >>= 8;
/*  401 */     buf[(off++)] = ((byte)(int)(val & 0xFF));
/*  402 */     val >>= 8;
/*  403 */     buf[(off++)] = ((byte)(int)(val & 0xFF));
/*  404 */     val >>= 8;
/*  405 */     buf[(off++)] = ((byte)(int)(val & 0xFF));
/*  406 */     val >>= 8;
/*      */     
/*  408 */     buf[(off++)] = ((byte)(int)(val & 0xFF));
/*  409 */     val >>= 8;
/*  410 */     buf[(off++)] = ((byte)(int)(val & 0xFF));
/*  411 */     val >>= 8;
/*  412 */     buf[(off++)] = ((byte)(int)(val & 0xFF));
/*  413 */     val >>= 8;
/*  414 */     buf[(off++)] = ((byte)(int)(val & 0xFF));
/*  415 */     val >>= 8;
/*      */   }
/*      */   
/*      */ 
/*      */   public static final byte getByte(byte[] buf, int off)
/*      */   {
/*  421 */     return buf[off];
/*      */   }
/*      */   
/*      */ 
/*      */ 
/*      */ 
/*      */   public static final short getShort(byte[] buf, int off)
/*      */   {
/*  429 */     byte low = buf[off];
/*  430 */     byte high = buf[(off + 1)];
/*      */     
/*  432 */     return (short)(high << 8 | 0xFF & low);
/*      */   }
/*      */   
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */   public static final int getUShort(byte[] buf, int off)
/*      */   {
/*  444 */     int b = 0xFF & buf[off];
/*  445 */     int n = 0xFF & buf[(off + 1)];
/*  446 */     n = b | n << 8;
/*  447 */     return 0xFFFF & n;
/*      */   }
/*      */   
/*      */ 
/*      */ 
/*      */ 
/*      */   public static final int getInt(byte[] buf, int off)
/*      */   {
/*  455 */     short low = getShort(buf, off);
/*  456 */     short high = getShort(buf, off + 2);
/*      */     
/*  458 */     return high << 16 | 0xFFFF & low;
/*      */   }
/*      */   
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */   public static final long getUInt(byte[] buffer, int offset)
/*      */   {
/*  471 */     int size = 4;
/*  472 */     int p = offset + size;
/*      */     
/*  474 */     long n = 0xFF & buffer[(--p)];
/*  475 */     long b = 0xFF & buffer[(--p)];
/*  476 */     n = b | n << 8;
/*      */     
/*  478 */     b = 0xFF & buffer[(--p)];
/*  479 */     n = b | n << 8;
/*      */     
/*  481 */     b = 0xFF & buffer[(--p)];
/*  482 */     n = b | n << 8;
/*  483 */     return 0xFFFFFFFFFFFFFFFF & n;
/*      */   }
/*      */   
/*      */ 
/*      */ 
/*      */   public static final long getLong(byte[] buf, int off)
/*      */   {
/*  490 */     long low = getInt(buf, off);
/*  491 */     long high = getInt(buf, off + 4);
/*      */     
/*  493 */     return high << 32 | 0xFFFFFFFFFFFFFFFF & low;
/*      */   }
/*      */   
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */   public static final byte[] getBytes(String str, String serverEncoding)
/*      */     throws SQLException
/*      */   {
/*  507 */     byte[] buf = null;
/*      */     
/*  509 */     if (serverEncoding != null)
/*      */     {
/*      */       try
/*      */       {
/*  513 */         buf = str.getBytes(serverEncoding);
/*      */       }
/*      */       catch (UnsupportedEncodingException ex)
/*      */       {
/*  517 */         System.out.println("encoding methods not supported!");
/*  518 */         throw new SQLException(ex.getMessage());
/*      */       }
/*      */       
/*      */     }
/*      */     else {
/*  523 */       buf = str.getBytes();
/*      */     }
/*      */     
/*  526 */     return buf;
/*      */   }
/*      */   
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */   public static final byte[] getBytes(String str, int offset, int len, String charsetName)
/*      */   {
/*  538 */     byte[] buf = null;
/*      */     
/*  540 */     if (str == null)
/*      */     {
/*  542 */       return buf;
/*      */     }
/*      */     
/*  545 */     if (charsetName != null)
/*      */     {
/*      */       try
/*      */       {
/*  549 */         buf = str.substring(offset, offset + len).getBytes(charsetName);
/*      */       }
/*      */       catch (UnsupportedEncodingException ex)
/*      */       {
/*  553 */         System.out.println("encoding methods not supported!");
/*      */       }
/*      */       
/*      */     }
/*      */     else {
/*  558 */       buf = str.substring(offset, offset + len).getBytes();
/*      */     }
/*      */     
/*  561 */     return buf;
/*      */   }
/*      */   
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */   public static final String getString(byte[] buffer, int offset, int bytelen)
/*      */   {
/*  573 */     if (buffer == null)
/*      */     {
/*  575 */       return null;
/*      */     }
/*      */     
/*  578 */     return new String(buffer, offset, bytelen);
/*      */   }
/*      */   
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */   public static final String getString(byte[] buffer, int offset, int byteLen, String charsetName)
/*      */   {
/*  590 */     String str = null;
/*      */     
/*  592 */     if (buffer == null)
/*      */     {
/*  594 */       return str;
/*      */     }
/*      */     
/*  597 */     if (charsetName == null)
/*      */     {
/*  599 */       str = new String(buffer, offset, byteLen);
/*      */     }
/*      */     else
/*      */     {
/*      */       try
/*      */       {
/*  605 */         str = new String(buffer, offset, byteLen, charsetName);
/*      */       }
/*      */       catch (UnsupportedEncodingException ex)
/*      */       {
/*  609 */         System.out.println("encoding methods not supported!");
/*      */       }
/*      */     }
/*      */     
/*  613 */     return str;
/*      */   }
/*      */   
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */   public static final void setString(byte[] buffer, String str, int offset)
/*      */   {
/*  624 */     byte[] buf = str.getBytes();
/*  625 */     int len = buf.length;
/*  626 */     for (int i = 0; i < len; i++)
/*      */     {
/*  628 */       buffer[(offset++)] = buf[i];
/*      */     }
/*      */   }
/*      */   
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */   public static final byte[] setStringWithNTS(byte[] buffer, int offset, byte[] buf)
/*      */   {
/*  644 */     int len = buf.length;
/*      */     
/*  646 */     if (len + offset >= buffer.length)
/*      */     {
/*  648 */       byte[] buf2 = new byte[len + offset + 1024];
/*      */       
/*  650 */       System.arraycopy(buffer, 0, buf2, 0, buffer.length);
/*      */       
/*  652 */       buffer = buf2;
/*      */     }
/*      */     
/*  655 */     System.arraycopy(buf, 0, buffer, offset, len);
/*      */     
/*  657 */     buffer[(offset + len)] = 0;
/*      */     
/*  659 */     return buffer;
/*      */   }
/*      */   
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */   public static final byte[] getBytesFrmLob(byte[] lob, DTypeInfo dType, LobDesc lobDesc, int stmtHandle, DmdbConnection_bs conn)
/*      */     throws SQLException
/*      */   {
/*  673 */     int len = lob.length;
/*  674 */     int nblob_inrow_hdr_size = conn.getNewLobFlag() ? 43 : 
/*  675 */       13;
/*  676 */     if (len < nblob_inrow_hdr_size) {
/*  677 */       DBError.throwSQLException(Const.res.getString("error.Lob.length"));
/*      */     }
/*  679 */     byte[] buf = null;
/*  680 */     if (lob[0] == 1)
/*      */     {
/*  682 */       byte[] s1 = new byte[4];
/*  683 */       System.arraycopy(lob, 9, s1, 0, 4);
/*  684 */       len = Math.min(len - nblob_inrow_hdr_size, fourByteToInt(s1));
/*  685 */       buf = new byte[len];
/*  686 */       System.arraycopy(lob, nblob_inrow_hdr_size, buf, 0, len);
/*      */       
/*  688 */       return buf;
/*      */     }
/*  690 */     if (lob[0] == 2)
/*      */     {
/*  692 */       byte flag = 0;
/*  693 */       if (dType.getDType() == 12) {
/*  694 */         flag = 0;
/*      */       } else {
/*  696 */         flag = 1;
/*      */       }
/*  698 */       DmdbLobLocator lobLocator = new DmdbLobLocator(lob, flag, lobDesc, conn.getNewLobFlag());
/*  699 */       return DmdbCSI.getBlobData(stmtHandle, conn, lobLocator);
/*      */     }
/*      */     
/*      */ 
/*  703 */     DBError.throwSQLException(6033);
/*  704 */     return null;
/*      */   }
/*      */   
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */   public static final byte[] getBytes(byte[] buffer, int offset, int len)
/*      */   {
/*  717 */     if (buffer == null)
/*      */     {
/*  719 */       return null;
/*      */     }
/*      */     
/*  722 */     byte[] buf = new byte[len];
/*  723 */     System.arraycopy(buffer, offset, buf, 0, len);
/*  724 */     return buf;
/*      */   }
/*      */   
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */   public static final byte[] getBytes(byte[] buffer, int offset, int len, String charsetName, String destCharsetName)
/*      */   {
/*  737 */     if (buffer == null)
/*      */     {
/*  739 */       return null;
/*      */     }
/*      */     
/*  742 */     byte[] buf = new byte[len];
/*  743 */     System.arraycopy(buffer, offset, buf, 0, len);
/*      */     
/*  745 */     if ((charsetName != null) && (destCharsetName != null))
/*      */     {
/*      */       try
/*      */       {
/*  749 */         String str = new String(buf, charsetName);
/*  750 */         buf = str.getBytes(destCharsetName);
/*      */       }
/*      */       catch (UnsupportedEncodingException ex)
/*      */       {
/*  754 */         System.out.println("encoding methods not supported!");
/*      */       }
/*      */     }
/*      */     
/*  758 */     return buf;
/*      */   }
/*      */   
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */   public static final byte[] getBytes(char[] buffer, int offset, int len, String charsetName, String destCharsetName)
/*      */   {
/*  771 */     if (buffer == null)
/*      */     {
/*  773 */       return null;
/*      */     }
/*      */     
/*  776 */     String str = new String(buffer, offset, len);
/*      */     
/*  778 */     return getBytes(str, offset, len, charsetName, destCharsetName);
/*      */   }
/*      */   
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */   public static final byte[] getBytes(String str, int offset, int len, String charsetName, String destCharsetName)
/*      */   {
/*  791 */     byte[] buf = null;
/*      */     
/*  793 */     if (str == null)
/*      */     {
/*  795 */       return null;
/*      */     }
/*      */     
/*  798 */     if (destCharsetName != null)
/*      */     {
/*      */       try
/*      */       {
/*  802 */         buf = str.getBytes(destCharsetName);
/*      */       }
/*      */       catch (UnsupportedEncodingException ex)
/*      */       {
/*  806 */         System.out.println("encoding methods not supported!");
/*      */       }
/*      */       
/*      */     }
/*      */     else {
/*  811 */       buf = str.getBytes();
/*      */     }
/*      */     
/*  814 */     return buf;
/*      */   }
/*      */   
/*      */ 
/*      */ 
/*      */ 
/*      */   public static final String bytesToHexString(byte[] bs)
/*      */   {
/*  822 */     if (bs == null)
/*      */     {
/*  824 */       return null;
/*      */     }
/*  826 */     if (bs.length == 0)
/*      */     {
/*  828 */       return "";
/*      */     }
/*  830 */     String hexDigits = "0123456789ABCDEF";
/*  831 */     String ret = "";
/*  832 */     for (int i = 0; i < bs.length; i++)
/*      */     {
/*  834 */       int high = 0xF & bs[i] >> 4;
/*  835 */       int low = 0xF & bs[i];
/*  836 */       ret = ret + hexDigits.charAt(high);
/*  837 */       ret = ret + hexDigits.charAt(low);
/*      */     }
/*  839 */     return ret;
/*      */   }
/*      */   
/*      */   public static final String intToHex(int num)
/*      */   {
/*  844 */     return intToHex(num, true);
/*      */   }
/*      */   
/*      */   private static final String intToHex(int num, boolean prefix)
/*      */   {
/*  849 */     String ret = "";
/*  850 */     if (prefix) {
/*  851 */       ret = ret + "0x";
/*      */     }
/*      */     
/*      */ 
/*  855 */     for (int i = 0; i < 2; i++) {
/*      */       int a;
/*  857 */       if (i == 0)
/*      */       {
/*  859 */         int a = num & 0xF0;
/*  860 */         a >>= 4;
/*      */       }
/*      */       else
/*      */       {
/*  864 */         a = num & 0xF;
/*      */       }
/*  866 */       if (a < 10)
/*      */       {
/*  868 */         ret = ret + a;
/*      */       }
/*      */       else
/*      */       {
/*  872 */         switch (a)
/*      */         {
/*      */         case 10: 
/*  875 */           ret = ret + "A";
/*  876 */           break;
/*      */         case 11: 
/*  878 */           ret = ret + "B";
/*  879 */           break;
/*      */         case 12: 
/*  881 */           ret = ret + "C";
/*  882 */           break;
/*      */         case 13: 
/*  884 */           ret = ret + "D";
/*  885 */           break;
/*      */         case 14: 
/*  887 */           ret = ret + "E";
/*  888 */           break;
/*      */         case 15: 
/*  890 */           ret = ret + "F";
/*  891 */           break;
/*      */         default: 
/*  893 */           return "";
/*      */         }
/*      */       }
/*      */     }
/*  897 */     return ret;
/*      */   }
/*      */   
/*      */   public static final String rowIdToHex(int high, int low)
/*      */   {
/*  902 */     byte[] low_tmp = IntToByteArray(low);
/*      */     
/*  904 */     String tmp = "";
/*  905 */     for (int i = 0; i < 4; i++)
/*      */     {
/*  907 */       tmp = tmp + intToHex(low_tmp[i], false);
/*      */     }
/*  909 */     tmp = tmp + intToHex(high, false);
/*  910 */     return tmp;
/*      */   }
/*      */   
/*      */   public static final byte[] intToBinary(int x, int prec)
/*      */   {
/*  915 */     byte[] b = IntToByteArray(x);
/*  916 */     byte[] c = new byte[prec];
/*  917 */     int position = 3;
/*  918 */     b[(position--)] = ((byte)(x & 0xFF));
/*  919 */     b[(position--)] = ((byte)(x >>> 8));
/*  920 */     b[(position--)] = ((byte)(x >>> 16));
/*  921 */     b[(position--)] = ((byte)(x >>> 24));
/*      */     
/*  923 */     if (prec <= b.length) {
/*  924 */       System.arraycopy(b, b.length - prec, c, 0, prec);
/*      */     } else {
/*  926 */       System.arraycopy(b, 0, c, prec - b.length, b.length);
/*      */     }
/*  928 */     return c;
/*      */   }
/*      */   
/*      */   public static final byte[] longToBinary(long x, int prec)
/*      */   {
/*  933 */     byte[] b = new byte[8];
/*  934 */     byte[] c = new byte[prec];
/*  935 */     int position = 7;
/*  936 */     b[(position--)] = ((byte)(int)(x & 0xFF));
/*  937 */     b[(position--)] = ((byte)(int)(x >>> 8));
/*  938 */     b[(position--)] = ((byte)(int)(x >>> 16));
/*  939 */     b[(position--)] = ((byte)(int)(x >>> 24));
/*  940 */     b[(position--)] = ((byte)(int)(x >>> 32));
/*  941 */     b[(position--)] = ((byte)(int)(x >>> 40));
/*  942 */     b[(position--)] = ((byte)(int)(x >>> 48));
/*  943 */     b[(position--)] = ((byte)(int)(x >>> 56));
/*      */     
/*  945 */     if (prec <= 8) {
/*  946 */       System.arraycopy(b, 8 - prec, c, 0, prec);
/*      */     } else {
/*  948 */       System.arraycopy(b, 0, c, prec - b.length, b.length);
/*      */     }
/*  950 */     return c;
/*      */   }
/*      */   
/*      */   private static int findHexNum(char c) throws SQLException
/*      */   {
/*  955 */     if ((c >= '0') && (c <= '9')) {
/*  956 */       return c - '0';
/*      */     }
/*  958 */     if ((c >= 'A') && (c <= 'F')) {
/*  959 */       return c - 'A' + 10;
/*      */     }
/*  961 */     if ((c >= 'a') && (c <= 'f')) {
/*  962 */       return c - 'a' + 10;
/*      */     }
/*  964 */     DBError.throwSQLException(6068);
/*  965 */     return 0;
/*      */   }
/*      */   
/*      */   private static byte mkByteByNum(int left, int right)
/*      */   {
/*  970 */     byte ret = (byte)(left & 0xF);
/*  971 */     ret = (byte)(ret << 4 | right & 0xF);
/*      */     
/*  973 */     return ret;
/*      */   }
/*      */   
/*      */   public static final byte[] stringToBinary(String str, int prec)
/*      */     throws SQLException
/*      */   {
/*  979 */     if (str == null) {
/*  980 */       return new byte[0];
/*      */     }
/*  982 */     str = str.trim();
/*      */     
/*  984 */     if ((str.startsWith("0x")) || (str.startsWith("0X")))
/*      */     {
/*  986 */       str = str.substring(2);
/*      */     }
/*      */     
/*  989 */     if (str.length() == 0) {
/*  990 */       return new byte[0];
/*      */     }
/*  992 */     int len = str.length();
/*  993 */     int destLen = len / 2;
/*  994 */     if (len % 2 != 0)
/*      */     {
/*  996 */       destLen++;
/*  997 */       str = "0" + str;
/*      */     }
/*      */     
/*      */ 
/*      */ 
/*      */ 
/* 1003 */     byte[] retBs = new byte[destLen];
/*      */     
/*      */ 
/*      */ 
/* 1007 */     for (int i = destLen - 1; i >= 0; i--)
/*      */     {
/* 1009 */       int left = findHexNum(str.charAt(i * 2));
/* 1010 */       int right = findHexNum(str.charAt(i * 2 + 1));
/*      */       
/* 1012 */       retBs[i] = mkByteByNum(left, right);
/*      */     }
/*      */     
/* 1015 */     return retBs;
/*      */   }
/*      */   
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */   static final byte getCharByNumVal(int val)
/*      */     throws SQLException
/*      */   {
/* 1039 */     if ((val >= 0) && (val <= 9)) {
/* 1040 */       return (byte)(val + 48);
/*      */     }
/* 1042 */     if ((val >= 10) && (val <= 15)) {
/* 1043 */       return (byte)(val + 65 - 10);
/*      */     }
/* 1045 */     DBError.throwSQLException(6068);
/* 1046 */     return 0;
/*      */   }
/*      */   
/*      */   static final byte[] binaryToChar(byte bt) throws SQLException
/*      */   {
/* 1051 */     byte[] ret = new byte[2];
/*      */     
/* 1053 */     ret[0] = getCharByNumVal(bt >> 4 & 0xF);
/* 1054 */     ret[1] = getCharByNumVal(bt & 0xF);
/*      */     
/* 1056 */     return ret;
/*      */   }
/*      */   
/*      */   public static final byte[] binaryArrToString(byte[] bsArr, int prec, int dType)
/*      */     throws SQLException
/*      */   {
/* 1062 */     if ((bsArr == null) || (bsArr.length == 0)) {
/* 1063 */       return null;
/*      */     }
/*      */     
/*      */ 
/*      */ 
/* 1068 */     int realLen = bsArr.length * 2;
/*      */     
/* 1070 */     byte[] bsRet = new byte[realLen];
/* 1071 */     byte[] bsTemp = null;
/* 1072 */     for (int i = 0; i < bsArr.length; i++)
/*      */     {
/* 1074 */       bsTemp = binaryToChar(bsArr[i]);
/*      */       
/* 1076 */       bsRet[(i * 2)] = bsTemp[0];
/* 1077 */       bsRet[(i * 2 + 1)] = bsTemp[1];
/*      */     }
/*      */     
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/* 1085 */     return bsRet;
/*      */   }
/*      */   
/*      */   public static final byte[] binaryArrToClob_bin(byte[] bsArr, int offset, int len) throws SQLException
/*      */   {
/* 1090 */     if ((bsArr == null) || (bsArr.length == 0)) {
/* 1091 */       return null;
/*      */     }
/* 1093 */     int realLen = len * 2;
/*      */     
/* 1095 */     byte[] bsRet = new byte[realLen];
/* 1096 */     byte[] bsTemp = null;
/* 1097 */     for (int i = 0; i < len; i++)
/*      */     {
/* 1099 */       bsTemp = binaryToChar(bsArr[(i + offset)]);
/*      */       
/* 1101 */       bsRet[(i * 2)] = bsTemp[0];
/* 1102 */       bsRet[(i * 2 + 1)] = bsTemp[1];
/*      */     }
/*      */     
/* 1105 */     return bsRet;
/*      */   }
/*      */   
/*      */   public static byte[] String_char_2CType(String str, int prec, int cType, String serverEncoding)
/*      */     throws SQLException
/*      */   {
/* 1111 */     if (str == null) {
/* 1112 */       return null;
/*      */     }
/* 1114 */     byte[] bs = getBytes(str, serverEncoding);
/*      */     
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/* 1134 */     return bs;
/*      */   }
/*      */   
/*      */ 
/*      */ 
/*      */   public static byte[] String_varchar_2CType(String str, int prec, int dType, String serverEncoding)
/*      */     throws SQLException
/*      */   {
/* 1142 */     byte[] inValueBytes = getBytes(str, serverEncoding);
/*      */     
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/* 1150 */     return inValueBytes;
/*      */   }
/*      */   
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */ 
/*      */   public static byte[] String_javaObj_2CType(String x, int dType, int scale, int prec, short ltz)
/*      */     throws SQLException
/*      */   {
/* 1187 */     byte[] ret = null;
/* 1188 */     x = x.trim();
/* 1189 */     if (x.length() > 0)
/*      */     {
/* 1191 */       int secPrec = scale & 0xF;
/* 1192 */       int loadPrec = scale >> 4 & 0xF;
/* 1193 */       switch (dType)
/*      */       {
/*      */       case 21: 
/* 1196 */         DmdbIntervalDT dt = new DmdbIntervalDT(x, loadPrec, secPrec);
/* 1197 */         ret = InterDtToByteArray(dt, scale);
/* 1198 */         break;
/*      */       case 20: 
/* 1200 */         DmdbIntervalYM ym = new DmdbIntervalYM(x, loadPrec);
/* 1201 */         ret = InterYMToByteArray(ym, scale);
/* 1202 */         break;
/*      */       
/*      */ 
/*      */       case 22: 
/*      */       case 23: 
/* 1207 */         DmdbTimeZone tz = null;
/* 1208 */         if (dType == 22)
/*      */         {
/* 1210 */           tz = new DmdbTimeZone(x, 1, ltz);
/* 1211 */           ret = TimeZoneToByteArray(tz);
/*      */         }
/*      */         else
/*      */         {
/* 1215 */           tz = new DmdbTimeZone(x, 2, ltz);
/* 1216 */           ret = DateTimeZoneToByteArray(tz);
/*      */         }
/* 1218 */         break;
/*      */       
/*      */       default: 
/* 1221 */         DBError.throwSQLException(6014);
/*      */         
/* 1223 */         break; }
/*      */     } else {
/* 1225 */       ret = null;
/*      */     }
/* 1227 */     return ret;
/*      */   }
/*      */ }


/* Location:              D:\Program Files\DBMS_20150813\jdbc\Dm7JdbcDriver17.jar!\dm\jdbc\dataConvertion\Convertion.class
 * Java compiler version: 2 (46.0)
 * JD-Core Version:       0.7.1
 */